// Problem: 
// Contest: 
// URL: 
// Memory Limit: 
// Time Limit: 
// #pragma GCC optimize("Ofast")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native")
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
	return s*w;
}
int dx[2]={0,1};
int dy[2]={1,0};
struct me
{
	int x,y,v;
	me(int xx,int yy,int vv)
	{
		x=xx,y=yy,v=vv;
	}
};
struct zh
{
	bool f;
	int v;
};
int n,m,ans,ret=0;
vector<vector<int>> v;
vector<vector<zh>> z;
me mes(0,0,0);
//void dfs(int x,int y,int t)
//{
//	for(int i=0;i<2;i++)
//	{
//		int xx=x+dx[i],yy=y+dy[i];
//		if(xx>n||yy>m||(z[xx][yy].f==1&&z[xx][yy].v==t+1))
//		{
//			ret=max(ret,ans);
//			continue;
//		}
//		ans+=v[xx][yy];
//		dfs(xx,yy,t+1);
//		ans-=v[xx][yy];
//	}
//}
signed main()
{
	
	cin>>n>>m;
	v=vector<vector<int>> (n+1,vector<int>(m+1));
	z=vector<vector<zh>> (n+1,vector<zh>(m+1));
	vector<vector<int>> dp (n+1,vector<int>(m+1));
	vector<vector<bool>> f (n+1,vector<bool>(m+1));
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>v[i][j];
	ans=v[1][1];
	int t;
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>mes.x>>mes.y>>mes.v;
		z[mes.x][mes.y].f=1;
		z[mes.x][mes.y].v=mes.v;
	}
	f[0][1]=f[1][0]=1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			if(z[i][j].f&&i+j-2>=z[i][j].v)
				continue;
			if(!f[i-1][j]&&!f[i][j-1])continue;
			f[i][j]=1;
			dp[i][j]=max(dp[i-1][j],dp[i][j-1])+v[i][j];
			ret=max(ret,dp[i][j]);
		}
	//dfs(1,1,0);
	cout<<ret;
	return 0;
}
